package fr.afcepf.ai89.lagrandebouffe.data;

import java.util.List;

import fr.afcepf.ai89.lagrandebouffe.entity.Plat;

/**
 * Méthodes utilisées par l'application
 * pour l'accès aux données manipulant le {@link Plat}.
 * Définit les traitements d'ajout,
 * de recherche et de suppression d'un {@link Plat}.
 * @author Florent
 *
 */
public interface IDataPlat {
    /**
     * Méthode permettant l'ajout de {@link Plat}
     *  dans la BDD.
     * @param lePlat - le {@link Plat} à ajouter.
     * @return
     * <code>
     * <ul>
     *  <li><strong>la clé primaire</strong><br />
     *  si le  {@link Plat} est bien ajouté.</li>
     *   <li>
     *      <strong>null</strong><br />
     *      dans le cas ou l'ajout ne marche pas.
     *   </li>
     * </ul>
     * </code>
     */
    Integer ajouter(Plat lePlat);
    /**
     * Méthode permettant la suppression d'un {@link Plat}
     *  dans la BDD.
     * @param lePlat - le {@link Plat} à manger.
     * @return
     * <code>
     * <ul>
     *  <li><strong>true</strong><br />
     *  si le  {@link Plat} est bien mangé.</li>
     *   <li>
     *      <strong>false</strong><br />
     *      si on a encore faim.
     *   </li>
     * </ul>
     * </code>
     */
    boolean manger(Plat lePlat);
    /**
     * Méthode permettant de rechercher des
     *  {@link Plat} par libelle.
     * @param libelle - le libelle recherché dans le {@link Plat}
     * @return une liste de {@link Plat}.
     * <code>
     *  <ul>
     *      <li>
     *          une liste vide si aucun {@link Plat}
     *          ne correspond au libellé demandé.
     *      </li>
     *      <li>une liste contenant tous les
     *      {@link Plat} dont le libellé contient
     *      le paramètre libellé du plat recherché.
     *      </li>
     *  </ul>
     * </code>
     */
    List<Plat> rechercher(String libelle);
}
